package com.banyou.banyou.base;

import android.os.Bundle;

import com.banyou.banyou.util.Constants;
import com.banyou.banyou.util.RxBus;
import com.banyou.banyou.util.SnackBarUtil;
import com.socks.library.KLog;

import java.util.LinkedList;

import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;

/**
 * ----------Dragon be here!----------/
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑
 * 　　　　┃　　　┃代码无BUG！
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━神兽出没━━━━━━
 * 项目名称：PinWheelMedical
 * 包名:com.yyxk.pinwheelmedical.base
 * 类描述：可弹出RxBus
 * 创建人：LX
 * 创建时间：2017/5/3 上午10:24
 * 修改人：LX
 * 修改时间：2017/5/3 上午10:24
 * 修改备注：
 */
public abstract class RxBusBaseActivity<P extends BasePresenter> extends BaseActivity<P> {

    private Subscription mSnackSubscription;
    private LinkedList<String[]> mMessageList=new LinkedList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initSubscription();
    }

    /**
     * 初始化RxBus
     * String[] 1：事件，2：类型，3：文本
     */
    protected void initSubscription(){
        mSnackSubscription = RxBus.getInstance()
                .toObserverable()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<Object>() {
            @Override
            public void call(Object o) {
                if(o instanceof String[]){
                    String[] strs= (String[]) o;
                    if(Constants.SHOW_SNACK.equals(strs[0])){
                        switch (strs[1]){
                            case "warn":
                                mMessageList.push(new String[]{"warn",strs[2]});
                                break;
                            case "success":
                                mMessageList.push(new String[]{"success",strs[2]});
                                break;
                            case "fail":
                                mMessageList.push(new String[]{"fail",strs[2]});
                                break;
                        }
                    }
                }
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(mMessageList.size()!=0) {
            String[] pop = mMessageList.pop();
            switch (pop[0]) {
                case "warn":
                    SnackBarUtil.makeLongSnackBar(pop[1]);
                    break;
                case "success":
                    SnackBarUtil.makeLongSnackBar(pop[1], true);
                    break;
                case "fail":
                    SnackBarUtil.makeLongSnackBar(pop[1], false);
                    break;
            }
            KLog.a("SnackBar弹出=====>"+pop[1]);
            mMessageList.removeAll(mMessageList);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mSnackSubscription.unsubscribe();
    }

}
